#include "DechiffreurLUA.h"

const char *CHEMINLUA = "../util/";

DechiffreurLUA::DechiffreurLUA()
{
	_lua = lua_open();
	luaL_openlibs(_lua);
}

int DechiffreurLUA::charger(char *fichier)
{
	char *cheminComplet;
	sprintf(cheminComplet, "%s%s", CHEMINLUA, fichier);
	int err = luaL_loadfile(_lua, cheminComplet);
	if(err == 0)
	{
		lua_pcall (_lua, 0, LUA_MULTRET, 0);
	}
	return err; 
}

int DechiffreurLUA::varEntier(char *nom)
{
	lua_pushstring(_lua, nom);
	lua_gettable(_lua, LUA_GLOBALSINDEX);
	int valeur = lua_tointeger(_lua, -1);
	lua_pop(_lua, -1);
	return valeur;
}

char* DechiffreurLUA::varString(char *nom)
{
	lua_pushstring(_lua, nom);
	lua_gettable (_lua, LUA_GLOBALSINDEX);
	char* valeur = (char*)lua_tostring(_lua, -1);
	lua_pop(_lua, -1);
	return valeur;
}

void DechiffreurLUA::varMatrice(char *nom, int matrice[][20], int taille)
{
	lua_getglobal(_lua, nom);
	
	lua_pushnil(_lua);  
	    
    int i = 0;
    int tab[taille];
    while(lua_next(_lua, -2) != 0)
    {
       if(lua_istable(_lua, -1))
       { 	
        	printTable(tab);
        	for(int j =0; j < taille ; j++)
	    	{
	    		matrice[i][j] = tab[j];
	    	}  
        }
        i++;
        lua_pop(_lua, 1); 
    }
}

void DechiffreurLUA::varTableau(char *nom, int tableau[])
{
	lua_getglobal(_lua, nom);
	printTable(tableau);
}

void DechiffreurLUA::printTable(int tableau[])
{  
    lua_pushnil(_lua);  
    
    int i = 0;
    while(lua_next(_lua, -2) != 0)
    {
        if(lua_isstring(_lua, -1))
        {     	   	
        	tableau[i] = atoi((char*)lua_tostring(_lua, -1));
        }
        i++;
        lua_pop(_lua, 1);   
    }
}

int DechiffreurLUA::execute(char *nom, vector<int> parametres)
{
	lua_pushstring (_lua, nom);
	lua_gettable (_lua, LUA_GLOBALSINDEX);
	int taille = parametres.size();
	for(int i = 0 ; i < taille ; i++)
	{
		lua_pushinteger(_lua, parametres[i]);
	}
	return lua_pcall(_lua, 1, 0, 0);
}

void DechiffreurLUA::fermeture()
{
	lua_close(_lua);
}
